/*
 * 文件名:MessagesServiceImpl.java
 * 创建时间:2010-10-01
 * 版本:2.0
 * 版权所有:杨涛 walle1027@gmail.com
 */
package com.yangtao.wms.system.messages.service.impl;
import com.yangtao.wms.system.messages.service.*;
import org.apache.commons.lang.StringUtils;
import java.io.Serializable;
import java.util.*;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yangtao.framework.hibernate.Selector;
import com.yangtao.framework.common.*;
import com.yangtao.framework.service.*;
import com.yangtao.framework.util.*;
import com.yangtao.system.dao.MessagesDao;
import com.yangtao.system.domain.Messages;
import com.yangtao.system.dao.MessagesItemsDao;
import com.yangtao.system.domain.MessagesItems;
import com.yangtao.wms.system.messages.web.*;
/**
 * 
 * @author 代码生成器 v-2.0
 * @version 2.0
 */
@Service()
public class MessagesServiceImpl extends BaseService implements MessagesService {

	@Autowired
	protected MessagesDao messagesDao;
	@Autowired
	protected MessagesItemsDao messagesItemsDao;
	/**
	* 查询记录，并且分页
	*
	* @param  model 页面参数
	*/
	@Override
	public MessagesModel list(MessagesModel model) {
		Selector selector = new Selector();
			selector.add(".messagesItems");
		messagesDao.findPageByCondition(selector, model.getPage(), model.getCondition());
	return model;
	}

	/**
	* 取得唯一记录
	*
	* @param  model 页面参数
	*/
	@Override
	public MessagesModel loadMessages(MessagesModel model) {
		if (StringHelper.isNotEmpty(model.getMessages().getId())) {
		Selector selector = new Selector();
			selector.add(".messagesItems");
		model.setMessages(messagesDao.loadForReview(model.getMessages().getId(),selector));
		}
		return model;
	}

	/**
	* 新增记录
	*
	* @param model 页面参数
	*/
	@Override
	public MessagesModel addMessages(MessagesModel model){
		//VO
		Messages messagesVO = model.getMessages();
		//PO
		Messages messagesPO = new Messages();
		mapper.map(messagesVO, messagesPO);
		//构造关联从对象
					//从model中取出关联子对象列表
					List<MessagesItems> messagesItemsVO = messagesVO.getMessagesItems();
					if(messagesItemsVO != null && messagesItemsVO.size()>0){
					List<MessagesItems> messagesItemsPO = new ArrayList<MessagesItems>();
					for(MessagesItems voItem : messagesItemsVO){
					if(voItem != null){
					MessagesItems poItem = new MessagesItems();
					mapper.map(voItem, poItem);
					//设置额外属性
					setMessagesItemsProperties(poItem, model);
					poItem.setMessages(messagesPO);
					messagesItemsPO.add(poItem);
					}
					}
					messagesPO.setMessagesItems(messagesItemsPO);
					}
		//保存对象
		messagesDao.save(messagesPO);
		//增加保存成功的消息
		model.addInfo("add.success");
		return model;
	}

	/**
	* 更新记录
	*
	* @param model 页面参数
	*/
	@Override
	public MessagesModel updateMessages(MessagesModel model){
		//VO
		Messages messagesVO = model.getMessages();
		//主键
		String messagesId = messagesVO.getId();
		//PO
		Messages messagesPO = messagesDao.load(messagesId);
		//复制页面属性
		mapper.map(messagesVO, messagesPO);
		//TODO 增加其他属性
		//TODO 更新关联对象
		//构造关联从对象
				//从model中取出关联子对象列表
				//先遍历PO
				List<MessagesItems> messagesItemsPO = messagesPO.getMessagesItems();
				List<MessagesItems> messagesItemsVO = messagesVO.getMessagesItems();
				if(messagesItemsPO == null){
					messagesItemsPO = new ArrayList<MessagesItems>();
					messagesPO.setMessagesItems(messagesItemsPO);
				}
				if(messagesItemsVO == null){
				    messagesItemsVO = new ArrayList<MessagesItems>();
				}
				List<MessagesItems> _messagesItemsVO = new LinkedList<MessagesItems>();
				_messagesItemsVO.addAll(messagesItemsVO);
				//更新或者删除
				for(Iterator<MessagesItems> i = messagesItemsPO.iterator();i.hasNext();){
				MessagesItems poItem = i.next();
				boolean isDeletedItem = true;
				for(Iterator<MessagesItems> j = _messagesItemsVO.iterator();j.hasNext();){
				MessagesItems voItem = j.next();
				if(poItem.getId().equals(voItem.getId())){
					//更新明细
					mapper.map(voItem, poItem);
					isDeletedItem = false;
					j.remove();
				}
				}
				if(isDeletedItem){
				i.remove();
				messagesItemsDao.delete(poItem);
				}
				}
				//新增
				if(_messagesItemsVO.size() > 0){
					for(MessagesItems voItem: _messagesItemsVO){
						MessagesItems poItem = new MessagesItems();
						mapper.map(voItem, poItem);
						//设置额外属性
						setMessagesItemsProperties(poItem, model);
						//TODO 根据级联设置，来决定操作
						poItem.setMessages(messagesPO);
						messagesItemsPO.add(poItem);
					}
				}
		//增加保存成功的消息
		model.addInfo("update.success");
		return model;
	}

	/**
	* 删除记录
	*
	* @param  model 页面参数
	*/
	@Override
	public MessagesModel deleteMessages(MessagesModel model){
		messagesDao.delete(model.getMessages().getId());
		model.addInfo("delete.success");
		return model;
	}
	/**
	* 设置关联对象:消息管理子表 的其他属性
	* 页面上无法传递过来的属性可以在此增加
	* 子类重写此方法可以在新增和修改的时候为关联实体增加额外的属性
	*
	* @param messagesItems 关联对象
	* @param model 页面参数类
	*/
	protected void setMessagesItemsProperties(final MessagesItems messagesItems,final MessagesModel model){
	}
}
